package models.proxies {

  import com.axon.dataservices.AxDS;
  import com.axon.mvc.helpers.AxVerbs;
  import com.axon.mvc.patterns.proxy.AxProxy;

  import helpers.LoginCredentials;

  import models.vo.User;

  import org.restfulx.Rx;

  [Bindable]
  public class SessionProxy extends AxProxy {
    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public var user:User = new User();

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function somebodyConnected():Boolean {
      return (user.name != "");
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function login(loginCredentials:LoginCredentials):void {
      AxDS.httpInvoke(onloginSuccess, onloginFailure,
        "usuarios/entrar.fxml",
        {'user[cpf]': loginCredentials.username, 'user[password]': loginCredentials.password,
          authenticity_token: Rx.authenticityToken},
        AxDS.POST, true);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function onloginSuccess(result:User):void {
      user = result;
      AxDS.sessionToken = result.rememberToken;
      reportSuccess(AxVerbs.LOGIN, result);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function onloginFailure(result:Object):void {
      reportFailure(AxVerbs.LOGIN, result);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function logout():void {

      AxDS.httpInvoke(null, null, "usuarios/sair");

      AxDS.sessionToken = null;
      user = new User();

      (facade as AppFacade).pleitoProxy.invalidarTodasAsListas();

      reportSuccess(AxVerbs.LOGOUT);
    }

  }
}